#include <iostream>
using namespace std;

class Animal
{
public:
  int m_age;
};

// 利用虚继承可以解决菱形继承的问题
// 继承之前 加上关键字 virtual 变为虚继承
// Animal 称为虚基类

// vbptr
// v - virtual
// b - base
// ptr - pointer

// 羊类
class Sheep : virtual public Animal
{
};

// 驼类
class Tuo : virtual public Animal
{
};

// 羊驼类
class SheepTuo : public Sheep, public Tuo
{
};

void test01()
{
  SheepTuo st;
  st.Sheep::m_age = 18;
  st.Tuo::m_age = 28;

  // 当菱形继承，两个父类拥有相同数据，需要加以作用域区分
  cout << "st.Sheep::m_age = " << st.Sheep::m_age << endl;
  cout << "st.Tuo::m_age = " << st.Tuo::m_age << endl;
  cout << "st.m_age = " << st.m_age << endl;

  // 这份数据 只要有一份就可以了，菱形继承导致数据有两份，资源浪费
}

int main(int argc, char const *argv[])
{

  test01();

  return 0;
}